package com.example.embed.calcite.service;

import com.example.embed.calcite.enums.FieldValueType;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.sql.type.SqlTypeName;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 表列定义类
 * <p>
 * 用于定义内存表中的列结构，包括列的名称、编码、数据类型等属性。
 * 该类提供了表结构的元数据信息，用于Calcite引擎识别和处理表数据。
 * </p>
 * 
 * @author zwg
 * @date 2025/7/7 18:17
 */
@Setter
@Getter
public class Column {

    /**
     * 字段ID，主键标识
     */
    protected Integer fieldId;
    /**
     * 列名称
     * <p>
     * 用于显示的中文或英文名称，最大长度32个字符
     * </p>
     */
    protected @Size(
            max = 32,
            message = "Name length max 32"
    ) @NotBlank(
            message = "Name cannot be blank"
    ) @Pattern(
            regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9_\\s]{1,32}$",
            message = "name, only supports: contains a maximum of 32 characters, including letters, digits, and underscores (_), and chinese."
    ) String name;
    /**
     * 列编码
     * <p>
     * 用于SQL查询的字段名，必须以字母开头，最大长度64个字符
     * </p>
     */
    protected @Size(
            max = 64,
            message = "Code length max 64"
    ) @NotBlank(
            message = "Code cannot be blank"
    ) @Pattern(
            regexp = "^[a-zA-Z]\\w{1,64}$",
            message = "code, only supports: contains a maximum of 64 characters, including letters, digits, and underscores (_), and chinese. It can't all be numbers."
    ) String code;
    /**
     * 字段值类型
     * <p>
     * 定义列的数据类型，如字符串、整数、日期时间等
     * </p>
     */
    protected @NotNull(
            message = "ValueType cannot be empty"
    ) FieldValueType valueType;
    /**
     * 列注释
     * <p>
     * 对列的描述说明
     * </p>
     */
    protected String comment;


}
